
package projectg06.figuras;
import static java.lang.Math.*;

public class Punto2D implements Punto{
    private double x=0;
    private double y=0;
    public Punto2D() {
    }
    public Punto2D(double x, double y) {
        this.setX(x);
        this.setY(y);
    }
    public double distancia(Object b) {
   	
        return sqrt(pow(((Punto2D)b).x-x,2)+pow(((Punto2D)b).y-y,2));
    }
    public double distanciaAlOrigen() {
        return sqrt(pow(x,2)+pow(y,2));
    }
    @Override
    public String toString() {
        return "X:"+getX()+"\tY:"+getY();
    }
    @Override
    public boolean equals(Object obj) {
        if(obj instanceof Punto2D){
            return this.x==((Punto2D)obj).x && this.getY()==((Punto2D)obj).getY();
        }
        return false;
    };
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return new Punto2D(this.x,this.y);
    }   
    public void setX(double x) {
        this.x = x;
    }
    public double getX() {
        return x;
    }
    public void setY(double y) {
        this.y = y;
    }
    public double getY() {
        return y;
    }
   
   
    public static void main(String[] args) {
        System.out.println("********* prueba constructores y toString ***********");
        Punto2D a=new Punto2D();
        Punto2D b=new Punto2D(45.3,25.0);
        System.out.println("B="+b);
        System.out.println("A="+a);
        System.out.println("********* prueba clone y equals **********");
        if(a.equals(b)){
            System.out.println("A es igual a B");
        }else{
            System.out.println("A es distinto a B");
        }
        a.setX(45.3);
        a.setY(25.0);
        if(a.equals(b)){
            System.out.println("A es igual a B");
        }else{
            System.out.println("A es distinto a B");
        }
        Punto2D c=null;
        try {
            c = (Punto2D)a.clone();
        } catch (CloneNotSupportedException e) {
            System.out.println("Incorrecto:");
            e.printStackTrace();
        }
        System.out.println("Objeto A:\n"+a);
        System.out.println("Objeto C:\n"+c);
        if(a.equals(c)){
            System.out.println("A es igual a C");
        }else{
            System.out.println("A es distinto a C");
        }   
        if(a==c){
            System.out.println("Error: en realidad referencian al mismo objeto");
        }else{
            System.out.println("Correcto: referencian distintos objetos");
        }
        System.out.println("************ prueba distancia al origen y distancia **********");       
        System.out.println("Distancia al Origen:"+a.distanciaAlOrigen());
        b.setX(88);
        b.setY(45);
        System.out.println("Distancia a-b:"+a.distancia(b));
        System.out.println("************ prueba distancia al origen y distancia **********");       

    }


   
}